package com.lagou.task09;

public class ShapRectTest {
    public static void main(String[] args) {
//        1.申明shap类型的引用指向shap类型的对象
        Shape sp1 = new Shape(2,4);
        sp1.show();//24
//        2.申明Rect类型的引用指向Rect类型的对象
        Rect rt1 =new Rect(1,3,2,5);
        rt1.show();//1325

        System.out.println("-------------------------------");
//        3。使用shap类型的引用指向rect类型的对象并打印
//        1.父类类型的引用指向子类类型的对象时，可以直接调用父类独有的方法
        Shape sp2 = new Rect(7,7,8,8);
        sp2.getX();//7

        System.out.println("-------------------------------");
//        2.当父类类型的引用指向子类类型的对象时，不可以直接调用子类独有的方法,但是可以强制转换父类类型为子类类型，再去调用
//        sp2.getLen();
        ((Rect) sp2).getLen();


        System.out.println("-------------------------------");
//        3.当父类类型的引用指向子类类型的对象时，引用调用父子类都有的非静态方法，编译阶段调用的是父类的，运行阶段运行的是子类的
        sp2.show();


        System.out.println("-------------------------------");
//        4.当父子类都有的静态方法，调用的都是父类的静态方法,不建议使用.直接引用，要使用1类名调用
//        sp2.test();
        Shape.test();


        System.out.println("-------------------------------");
//        1。引用数据类型的转换注意事项，引用数据类型的转换必须是父子类，拥有继承关系
//        Circle c1 = (Circle) new Shape();//编译ok，运行异常：ClassCastException，

        if (sp1 instanceof Shape){
            //instanceof 类型判断
        }else{

        }
    }
}
